home *** CD-ROM | disk | FTP | other *** search
- package sun.misc;
-
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.net.JarURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.net.URLStreamHandler;
- import java.security.AccessControlException;
- import java.security.AccessController;
- import java.security.PrivilegedActionException;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.LinkedList;
- import java.util.Set;
- import java.util.StringTokenizer;
- import java.util.jar.Attributes;
- import java.util.jar.JarEntry;
- import java.util.jar.JarFile;
- import java.util.jar.Manifest;
- import java.util.jar.Attributes.Name;
- import java.util.zip.ZipEntry;
- import sun.net.www.ParseUtil;
-
- class URLClassPath$JarLoader extends URLClassPath.Loader {
- private JarFile jar;
- private URL csu;
- private JarIndex index;
- private MetaIndex metaIndex;
- private URLStreamHandler handler;
- private HashMap lmap;
-
- URLClassPath$JarLoader(URL var1, URLStreamHandler var2, HashMap var3) throws IOException {
- super(new URL("jar", "", -1, var1 + "!/", var2));
- this.csu = var1;
- this.handler = var2;
- this.lmap = var3;
- if (!this.isOptimizable(var1)) {
- this.ensureOpen();
- } else {
- String var4 = var1.getFile();
- if (var4 != null) {
- var4 = ParseUtil.decode(var4);
- File var5 = new File(var4);
- this.metaIndex = MetaIndex.forJar(var5);
- if (this.metaIndex != null && !var5.exists()) {
- this.metaIndex = null;
- }
- }
-
- if (this.metaIndex == null) {
- this.ensureOpen();
- }
- }
-
- }
-
- JarFile getJarFile() {
- return this.jar;
- }
-
- private boolean isOptimizable(URL var1) {
- return "file".equals(var1.getProtocol());
- }
-
- private void ensureOpen() throws IOException {
- if (this.jar == null) {
- try {
- AccessController.doPrivileged(new URLClassPath.JarLoader.1(this));
- } catch (PrivilegedActionException var2) {
- throw (IOException)var2.getException();
- }
- }
-
- }
-
- private JarFile getJarFile(URL var1) throws IOException {
- if (this.isOptimizable(var1)) {
- FileURLMapper var3 = new FileURLMapper(var1);
- if (!var3.exists()) {
- throw new FileNotFoundException(var3.getPath());
- } else {
- return new JarFile(var3.getPath());
- }
- } else {
- URLConnection var2 = this.getBaseURL().openConnection();
- var2.setRequestProperty("UA-Java-Version", URLClassPath.JAVA_VERSION);
- return ((JarURLConnection)var2).getJarFile();
- }
- }
-
- JarIndex getIndex() {
- try {
- this.ensureOpen();
- } catch (IOException var2) {
- throw (InternalError)(new InternalError()).initCause(var2);
- }
-
- return this.index;
- }
-
- Resource checkResource(String var1, boolean var2, JarEntry var3) {
- URL var4;
- try {
- var4 = new URL(this.getBaseURL(), ParseUtil.encodePath(var1, false));
- if (var2) {
- URLClassPath.check(var4);
- }
- } catch (MalformedURLException var6) {
- return null;
- } catch (IOException var7) {
- return null;
- } catch (AccessControlException var8) {
- return null;
- }
-
- return new URLClassPath.JarLoader.2(this, var1, var4, var3);
- }
-
- boolean validIndex(String var1) {
- String var2 = var1;
- int var3;
- if ((var3 = var1.lastIndexOf("/")) != -1) {
- var2 = var1.substring(0, var3);
- }
-
- Enumeration var6 = this.jar.entries();
-
- while(var6.hasMoreElements()) {
- ZipEntry var5 = (ZipEntry)var6.nextElement();
- String var4 = var5.getName();
- if ((var3 = var4.lastIndexOf("/")) != -1) {
- var4 = var4.substring(0, var3);
- }
-
- if (var4.equals(var2)) {
- return true;
- }
- }
-
- return false;
- }
-
- URL findResource(String var1, boolean var2) {
- Resource var3 = this.getResource(var1, var2);
- return var3 != null ? var3.getURL() : null;
- }
-
- Resource getResource(String var1, boolean var2) {
- if (this.metaIndex != null && !this.metaIndex.mayContain(var1)) {
- return null;
- } else {
- try {
- this.ensureOpen();
- } catch (IOException var5) {
- throw (InternalError)(new InternalError()).initCause(var5);
- }
-
- JarEntry var3 = this.jar.getJarEntry(var1);
- if (var3 != null) {
- return this.checkResource(var1, var2, var3);
- } else if (this.index == null) {
- return null;
- } else {
- HashSet var4 = new HashSet();
- return this.getResource(var1, var2, var4);
- }
- }
- }
-
- Resource getResource(String var1, boolean var2, Set var3) {
- boolean var6 = false;
- int var7 = 0;
- Object var8 = null;
- LinkedList var18;
- if ((var18 = this.index.get(var1)) == null) {
- return null;
- } else {
- do {
- Object[] var5 = var18.toArray();
- int var9 = var18.size();
-
- while(var7 < var9) {
- String var10 = (String)var5[var7++];
-
- URLClassPath$JarLoader var11;
- URL var12;
- try {
- var12 = new URL(this.csu, var10);
- if ((var11 = (URLClassPath$JarLoader)this.lmap.get(var12)) == null) {
- var11 = (URLClassPath$JarLoader)AccessController.doPrivileged(new URLClassPath.JarLoader.3(this, var12));
- JarIndex var13 = var11.getIndex();
- if (var13 != null) {
- int var14 = var10.lastIndexOf("/");
- var13.merge(this.index, var14 == -1 ? null : var10.substring(0, var14 + 1));
- }
-
- this.lmap.put(var12, var11);
- }
- } catch (PrivilegedActionException var16) {
- continue;
- } catch (MalformedURLException var17) {
- continue;
- }
-
- boolean var19 = !var3.add(var12);
- if (!var19) {
- try {
- var11.ensureOpen();
- } catch (IOException var15) {
- throw (InternalError)(new InternalError()).initCause(var15);
- }
-
- JarEntry var20 = var11.jar.getJarEntry(var1);
- if (var20 != null) {
- return var11.checkResource(var1, var2, var20);
- }
-
- if (!var11.validIndex(var1)) {
- throw new InvalidJarIndexException("Invalid index");
- }
- }
-
- Resource var4;
- if (!var19 && var11 != this && var11.getIndex() != null && (var4 = var11.getResource(var1, var2, var3)) != null) {
- return var4;
- }
- }
-
- var18 = this.index.get(var1);
- } while(var7 < var18.size());
-
- return null;
- }
- }
-
- URL[] getClassPath() throws IOException {
- if (this.index != null) {
- return null;
- } else if (this.metaIndex != null) {
- return null;
- } else {
- this.ensureOpen();
- this.parseExtensionsDependencies();
- if (SharedSecrets.javaUtilJarAccess().jarFileHasClassPathAttribute(this.jar)) {
- Manifest var1 = this.jar.getManifest();
- if (var1 != null) {
- Attributes var2 = var1.getMainAttributes();
- if (var2 != null) {
- String var3 = var2.getValue(Name.CLASS_PATH);
- if (var3 != null) {
- return this.parseClassPath(this.csu, var3);
- }
- }
- }
- }
-
- return null;
- }
- }
-
- private void parseExtensionsDependencies() throws IOException {
- ExtensionDependency.checkExtensionsDependencies(this.jar);
- }
-
- private URL[] parseClassPath(URL var1, String var2) throws MalformedURLException {
- StringTokenizer var3 = new StringTokenizer(var2);
- URL[] var4 = new URL[var3.countTokens()];
-
- for(int var5 = 0; var3.hasMoreTokens(); ++var5) {
- String var6 = var3.nextToken();
- var4[var5] = new URL(var1, var6);
- }
-
- return var4;
- }
-
- // $FF: synthetic method
- static URL access$400(URLClassPath$JarLoader var0) {
- return var0.csu;
- }
-
- // $FF: synthetic method
- static JarFile access$502(URLClassPath$JarLoader var0, JarFile var1) {
- return var0.jar = var1;
- }
-
- // $FF: synthetic method
- static JarFile access$600(URLClassPath$JarLoader var0, URL var1) throws IOException {
- return var0.getJarFile(var1);
- }
-
- // $FF: synthetic method
- static JarIndex access$702(URLClassPath$JarLoader var0, JarIndex var1) {
- return var0.index = var1;
- }
-
- // $FF: synthetic method
- static JarFile access$500(URLClassPath$JarLoader var0) {
- return var0.jar;
- }
-
- // $FF: synthetic method
- static MetaIndex access$800(URLClassPath$JarLoader var0) {
- return var0.metaIndex;
- }
-
- // $FF: synthetic method
- static JarIndex access$700(URLClassPath$JarLoader var0) {
- return var0.index;
- }
-
- // $FF: synthetic method
- static HashMap access$900(URLClassPath$JarLoader var0) {
- return var0.lmap;
- }
-
- // $FF: synthetic method
- static URLStreamHandler access$1000(URLClassPath$JarLoader var0) {
- return var0.handler;
- }
- }
-